#pragma once
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

class InetAddr
{
public:
    InetAddr(const uint16_t port, const struct in_addr ip)
        : _port(port), _ip(ip)
    {
        // 参数就是网络序列
        memset(&_peer, 0, sizeof(_peer));
        _peer.sin_family = AF_INET;
        _peer.sin_port = _port;
        _peer.sin_addr = _ip;
    }
    bool operator==(const InetAddr &inetaddr) const
    {
        return (_port == inetaddr._port) && (_ip.s_addr == inetaddr._ip.s_addr);
    }

    // 返回本地序列的端口号
    uint16_t Port() const { return ntohs(_port); }
    // 返回本地序列的点分十进制ip
    std::string IpString() const { return inet_ntoa(_ip); }
    // 返回网络地址对象指针
    const struct sockaddr_in *Peer() const { return &_peer; }

    ~InetAddr()
    {
    }

private:
    uint16_t _port;           // 网络序列port
    struct in_addr _ip;       // 网络序列ip
    struct sockaddr_in _peer; // 网络序列peer
};